/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ucab.desarrollo.viajesbook.persistencia;

import java.util.List;
import org.hibernate.Session;
import ucab.desarrollo.viajesbook.beans.Amistad;
import ucab.desarrollo.viajesbook.beans.Usuario;

/**
 *
 * @author isak
 */
public class AmistadDAO extends  AbstractHibernateDAO<Amistad, Integer> implements  IAmistadDAO{

     /**
     * metodo que solicita una amistad
     * @param amistad
     */
    public void salvarAmistad(Amistad amistad)
    {
        super.salvar(amistad);
    }

 /**
     * metodo que solicita una amistad
     * @param amistad
     */
    public void actualizarAmistad(Amistad amistad)
    {
        super.actualizar(amistad);
    }



    /**
     * Metodo accesorio para obtener la clase dominio
     * @return
     */
    @Override
    protected Class<Amistad> getDomainClass() {
        return Amistad.class;
    }

    /**
     * comprueba si la amistad existe previamente
     * @param amistad
     * @return amistad
     */
    public Amistad solicitudPrevia(Amistad amistad)
    {
        Session sesion = getSession();
        String consulta = "from Amistad as ami where ami.usuarioByUsuarioSolicita.idusuario ="  +amistad.getUsuarioByUsuarioSolicita().getIdusuario() +  "and ami.usuarioByUsuarioRecibe.idusuario = " + amistad.getUsuarioByUsuarioRecibe().getIdusuario()
                + "or (ami.usuarioByUsuarioSolicita.idusuario = " + amistad.getUsuarioByUsuarioRecibe().getIdusuario() + " and ami.usuarioByUsuarioRecibe.idusuario = " + amistad.getUsuarioByUsuarioSolicita().getIdusuario() + ")";
        return (Amistad)sesion.createQuery(consulta).uniqueResult();
    }

    /**
    * lista de solicitudes de amistad pendientes.
    * @param usuario
    * @return
    */
    public List listaDeSolicitudes(Usuario usuario)
    {
        Session sesion = getSession();
        // String consulta = "from Amistad as ami where ami.usuarioByUsuarioRecibe = " + usuario.getIdusuario()  + "and ami.amistadaceptada = \'solicitada\' ";
        String consulta ="select new List(usr.usuariofoto, usr.idusuario as id , usr.usuarionombre as nombre, usr.usuarioappellido as apellido) from Usuario as usr, Amistad as ami where  ami.usuarioByUsuarioRecibe.idusuario = "+ usuario.getIdusuario() +" and usr.idusuario = ami.usuarioByUsuarioSolicita.idusuario and ami.amistadaceptada = 'solicitada'";
        return sesion.createQuery(consulta).list();
    }
}
